/*
 * Copyright (C) 2008,2009,2010,2011  Paulo Cesar Pereira de Andrade.
 *
 * This is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This software is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * Authors:
 *	Paulo Cesar Pereira de Andrade
 */

#ifndef _exl_h
#define _exl_h

#if HAVE_CONFIG_H
# include "config.h"
#endif

#include <assert.h>
#include <errno.h>
#include <math.h>
#include <complex.h>
#include <limits.h>
#if HAVE_THREAD
#include <pthread.h>
#endif
#include <gmp.h>
#include <mpfr.h>
#include <mpc.h>
#include <stddef.h>
#include <string.h>

#include "edefs.h"
#include "cqq.h"
#include "etypes.h"

#if __WORDSIZE == 32
#  if (GMP_NAIL_BITS != 0) || (GMP_LIMB_BITS != 32)
/* FIXME it would be desirable a gmp with _LONG_LONG_LIMB but since it
 * is not the default, dont even support it.
 *   Probably not a good idea to have a gmp tree in the interpreter,
 * but that can be considered later, for static linking, or,
 * in case too many gmp internals are used...
 */
#    error "Unsupported GMP (need GMP_NAIL_BITS == 0 and GMP_LIMB_BITS == 32)"
#  endif
#elif __WORDSIZE == 64
#  if (GMP_NAIL_BITS != 0) || (GMP_LIMB_BITS != 64)
#    error "Unsupported GMP (need GMP_NAIL_BITS == 0 and GMP_LIMB_BITS == 64)"
#  endif
#  else
/* FIXME also need sizeof(void*) == __WORDSIZE */
#  error "Unsupported architecture (need __WORDSIZE == 32 or __WORDSIZE == 64)"
#endif

#include "eobject.h"
#include "eparser.h"
#include "evm.h"

#include "ebuiltin.h"
#include "ecfg.h"
#include "ecode.h"
#include "ecse.h"
#include "edata.h"
#include "edebug.h"
#include "edfa.h"
#include "eemit.h"
#include "eerror.h"
#include "efold.h"
#include "efunction.h"
#include "ehash.h"
#include "ehashtable.h"
#include "einfer.h"
#include "elive.h"
#include "enote.h"
#include "emath.h"
#include "empcache.h"
#include "enumber.h"
#include "epropagate.h"
#include "eoptimize.h"
#include "eread.h"
#include "erecord.h"
#include "ereduce.h"
#include "essa.h"
#include "estream.h"
#include "estring.h"
#include "esymbol.h"
#include "etag.h"
#include "ethread.h"
#include "evector.h"
#if XWINDOW
#  include "ewindow.h"
#endif
#include "ewrite.h"

#endif /* _exl_h */
